環境マネージメントゲーム(SARA版)


はじめに

 本プログラムは、京都大学経済学部の出口弘氏による、「環境マネージメントゲームVer.0.98」をもとに、そのゲーミングをマルチエージェント記述言語「SARA」で記述したものである。出口氏によるオリジナルのドキュメントは、こちらを参照されたい。
 本ドキュメントはオペレータのために書かれたものである。各プレーヤには、こちらのドキュメントを配布されたい。
 SARAによって実装されたことにより、本プログラムによるゲーミングは以下の特徴を持っている。

  1. 計算を自動化することにより、オペレータとプレーヤの負担を軽減し、また計算ミスをなくすことができる
  2. 上記によって、ゲームに要する時間を短縮し、より手軽に密度の濃いゲームを実現する
  3. ネットワーク上で実施できるため、地理的に離れた場所でもゲームに参加でき、また多人数でプレーすることも容易である
  4. ゲームルールの変更・拡張が容易であり、税金などの制度を動的に導入できる。
  5. 本バージョンでは実装されていないが、プレーヤに自律エージェントを含めることも可能である。


ゲームの目的

 本プログラムは、出口氏のいうところの

 環境マネージメントゲームは、一定の閉ざされた環境のもとでの羊の放牧によって生計をたてる仮想の集団のグループゲーミングシミュレーションである。プレーヤはMOU(マネーユニット:マウと読む)という単位の現金で羊や食料などの取引をゲームファシリテータと行ったり、羊を借りることができる。プレーヤは自らの豊かな生活を目指してこれらの取引を通じてゲームを行う。各期の終わりに手持ちの羊にその期の共有地の羊の総量に依存した増殖倍率をかけた羊が今期の期末の増殖分を含む羊数として与えられる。個々のプレーヤは羊を増やすことでその生活は豊かになるが、共有地全体で羊を増やし過ぎると羊の増殖率が低下するという社会的ジレンマ状況が成立する。
 を踏襲し、オリジナルのゲームをコンピュータ上で忠実に再現するべく作成された。しかし、オリジナルのゲームとコンピュータプログラム上でのそれとは、媒体の性質上、いくつかの点で異なる性質を持つ可能性があるが、その点については後述する。


実行方法

 ここでの説明は、既にSARAの実行環境が整えられていることを前提に進める。すなわち、SARAシステムとそのライブラリが適切にインストールされ、サーバーの public_html ディレクトリからSARAのトップディレクトリ( sara )にシンボリックリンクが張られ、環境変数 SARA_HOME に 同ディレクトリへのパスが設定されている状態である。

  1. カレントディレクトリを commons.spd のあるディレクトリに移し、そこで を実行すると、サーバープログラム(SARAインタープリタ)が起動し、そして commons.spd というファイルが読み込まれて実行が開始される。
  2. 画面上の指示に従って、SARAインタープリタ上で を入力してプレーヤの人数を指定する。ただし、この時 n はプレーヤの人数を数字で置き換えて入力する必要がある。例えば、5人でプレーする場合は を入力すればよい。
  3. 上記の操作によって、commons.spd があるディレクトリからの相対パスが のディレクトリに、プレーヤーの人数分のHTMLファイルが作られるので、各プレーヤが自分の担当のものを読み込んで、プレイヤーインターフェースのプログラムを実行する。すなわち、プレーヤが各々の端末において、appletviewer や WWWブラウザなどの、JAVAアプレットを実行できるソフトでファイルを読み込むのである。例えばプレーヤ1(太郎)を担当するプレーヤは、サーバープログラムを起動しているサーバー上にある先程作られたHTMLファイルを、以下の様にURLで指定して表示してやればよい。 なお、アプレットが適切に立ち上がったかどうかをオペレータが把握するには、SARAインタープリタ上で、 と入力すればよい。これは、サーバーに繋がったアプレットの一覧を表示するコマンドである。
  4. 全てのプレーヤがアプレットを立ち上げた後に、SARAインタープリタ上で を入力すると、ゲームが開始される。各プレーヤのインターフェースには、ゲームが開始された旨のメッセージが表示され、以後はプレーヤの行動によってゲームは進行していく。
  5. ゲームを終了するには、SARAインタープリタ上で、 と入力する。すると、その次のタームを最終タームに設定して、最終タームの終了とともに勝利者を表示してゲームは終了する。


ゲームの進行

 ゲームはターム制で進行する。タームが開始されると、各プレーヤには以下の7つのアクションが選択可能になり、任意のアクションを任意の回数だけ実行することができる。そのタームに行いたいアクションが一通り終わったプレーヤは、「行動完了」というアクションを選択する。全てのプレーヤが行動完了した時点で、終了処理を行って、次のタームが開始される。ゲームはこのプロセスを繰り返すことで進行し、オペレータが設定した最終タームの終了とともに終了する。
 各プレーヤは、タームごとに繁殖する羊をやりくりしながら経済活動を行い、それによって得られた資金で生活の為の「食料」や、豊かさを表す「宝石」を購入していく。なお、食料はタームごとに1袋消費されるので、底をつかせてはならない。

 各タームが終了した時点で、各プレーヤの「飼っている羊」の合計が計算され、それに基づいて、環境(共用地)の持つ「羊の繁殖倍率」が算出される。そして、各プレーヤの羊はその倍率を掛けた匹数に増やされる。ただし、小数部はまるめられる。
 返済期限の羊を返すことができなくなったプレーヤには、タームの開始時にそれを判定されて、破産処理がなされる。破産したプレーヤは初期状態に戻り、そのままゲームを続行することになる。
 最終タームはオペレータが設定し、「羊を借りる」のアクションは禁止される。勝利者の判定については、ゲーム終了時に保持している羊の数(返済期限の羊があればそれを差し引いて数える)と食料や宝石を資金に換算し、それが最も大きいプレーヤを勝利者とする。


参照できるリソース

 プレーヤが意志決定をする際に参照することができるリソースには以下のものがある。各々のプレーヤは、インターフェースでタブを選択することによって他の全てのプレーヤの(そのターム開始時点での)リソースを見ることができる。


繁殖倍率の算出、破産判定、勝利判定のアルゴリズム

 「羊の繁殖倍率」は、各タームの終了時に算出される。繁殖倍率は、環境における羊の合計、すなわち全てのプレーヤの「飼っている羊」の合計と、プレーヤの数、すなわち「羊飼いの人数」に依存するが、そのアルゴリズムは以下である。なお、このアルゴリズムはプレーヤには秘密にしておくことが望ましい。

 プレーヤの破産判定は各タームの開始時になされるが、そのアルゴリズムは以下である。すなわち、そのタームにどのような行動をとっても、「行動完了」の基準を満たすことができないとみなされる場合に、破産が宣告されるのである。ただし、最終タームは羊の借り入れができないので、食料を持っていない場合は右辺から食料の価格を引くことになる。  ゲーム終了時には、その時点での総資産が最も多いプレーヤを全プレーヤに通知する。総資産の算出は以下の手順をとる。すなわち、最終タームの直前のタームで借りた羊については、返済利率を掛けた匹数を返済させ、残った羊や食料などの財を資金に換算したものを総資産とする。


オペレータのための、その他の機能

 ゲームを開始、終了する為の操作の他にも、オペレータがゲームの展開を把握したり、プレーヤと通信するための機能がいくつか用意されている。それらはSARAインタープリタ上で以下のコマンドを入力することによって使うことができる(実際はインタープリタのコマンドではなく、クロージャを呼び出している)。


制度の導入

 ゲームのバリエーションとして、税金と補助金の制度をとることができる。実際には税は金ではなく羊を徴収し、また補助金も羊で交付される。税は以下のアルゴリズムで算出され、タームの行動を完了した時に徴収される。すなわち、飼っている7匹以上の羊に対して税率を掛けた頭数を徴収する。ただし、端数はまるめられる。

 税率の決定には単純課税方式と累進課税方式があり、前者は一律10%であるが、後者は以下のアルゴリズムに基づく。  補助羊制度は、税として徴収した羊を、飼っている羊が5匹以下のプレーヤに頭割りで分配する制度である。ただし、該当するプレーヤがいない場合や頭割りに不足する場合はその羊の分配は次のタームに持ち越され、また頭割りして余った羊も同様に持ち越される。
 上記の各制度はゲーム中にオペレータによって導入あるいは廃止される。それには以下のコマンドを用いる。ただし、導入・廃止が反映されるのはコマンドを入力した次のタームからである(ゲームの最初から導入したい場合は、go(); を入力する前に導入すればよい)。


オリジナルとの比較

 プレーヤの豊かさを示す「財」の種類が、オリジナルでは車や家など多様に用意されているのに対し、本プログラムでは「宝石」のみしか用意していない。これは、現時点でのSARAのプレーヤインターフェースでは、財の存在をプロパティの数字が変化することでしか表現できないことによる。すなわち、財の存在が注目されにくくなることを抑止するために、その種類を1つに絞ったものである。
 本ゲームにおいては、プレーヤが意志決定をする際には、環境や他のプレーヤの状態を参考にすることになり、したがって、プレーヤがいかなる情報を得ることができるかはゲームの性質を左右する重要な要素である。オリジナルではゲームマスターが実施環境を任意に設定することができ、あるいは曖昧にしておくことも可能であるが、本プログラムでは媒体の性質上、参照できる情報とそうでないものの区別を明確にしなければならない。ところで、既に述べたように、プレーヤは前ターム終了時における各プレーヤの個別の情報を全て参照できるようにしてある。これはオリジナルの目的にできるだけ沿う形で設定したつもりであるが、コードに少々手を加えることによって、任意に変更することも可能である。
 上記と同様の理由により、プレーヤ同士のコミュニケーションの可・不可も厳密に設定する必要がある。オリジナルではプレーヤ同士が会話をすることによってコミュニケーションをとることができるが、本プログラムでは、ネットワークを使っての実施を鑑みて、オペレータの裁量で「発言する」というアクションを使用できるようにした。これによって、プレーヤは任意の相手に任意の情報を伝えることができるようになる。この機能はデブリーフィングにも活用されたい。